package tech.aister.mapper;

import lombok.Data;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import teach.aistar.pojo.User;
import teach.aistar.pojo.UserVo;

import java.util.List;

/**
 * 本来用来演示: 用户持久层接口
 *
 * @author success
 * @date 2025/2/26 10:50:58
 */
public interface UserMapper {
    /**
     * 查询所有的用户
     * @return
     */
    @Select("select * from t_user")
    List<User> findAll();

    /**
     * 因为邮箱是唯一的
     * 根据邮箱查找用户
     * @param email 邮箱
     * @return 单个用户
     */
    @Select("select * from t_user where email=#{value}")
    User getByEmail(String email);

    /**
     * 根据id进行删除
     * @param id 用户的id
     * @return 受影响的行数,比如成功删除了一行,返回数字1.  如果删除失败,则返回数字0
     */
    @Delete("delete from t_user where id=#{value}")
    int delById(Integer id);

    /**
     * #{占位符名称}中的名称需要和@Param("名称")中的名称保持一致即可
     * 根据用户名和密码来查找用户
     * @param username
     * @param password
     * @return 成功则返回对应的user对象,否则返回null(对象的默认值都是null)
     */
    @Select("select * from t_user where username=#{username} and password=#{password}")
    User findByUsernameAndPassword(@Param("username") String username,@Param("password") String password);

    /**
     * 使用一个第三方的对象来封装查询条件.只要保证占位符#中的单词的名称和第三方类中定义的属性名称高度保持一致即可
     * @param userVo
     * @return
     */
    @Select("select * from t_user where username=#{uname} and password=#{pwd}")
    User getByUsernameAndPassword(UserVo userVo);


}
